{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import tensorflow.keras as K\n",
    "import matplotlib.pyplot as plt\n",
    "from tensorflow.keras.layers import Dense, Conv2D, MaxPooling2D, UpSampling2D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(11)\n",
    "tf.random.set_seed(11)\n",
    "batch_size = 128\n",
    "max_epochs = 50\n",
    "filters = [32,32,16]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, _), (x_test, _) = K.datasets.mnist.load_data()\n",
    "\n",
    "x_train = x_train / 255.\n",
    "x_test = x_test / 255.\n",
    "\n",
    "x_train = np.reshape(x_train, (len(x_train),28, 28, 1))\n",
    "x_test = np.reshape(x_test, (len(x_test), 28, 28, 1))\n",
    "\n",
    "noise = 0.5\n",
    "x_train_noisy = x_train + noise * np.random.normal(loc=0.0, scale=1.0, size=x_train.shape)\n",
    "x_test_noisy = x_test + noise * np.random.normal(loc=0.0, scale=1.0, size=x_test.shape)\n",
    "\n",
    "x_train_noisy = np.clip(x_train_noisy, 0, 1)\n",
    "x_test_noisy = np.clip(x_test_noisy, 0, 1)\n",
    "\n",
    "x_train_noisy = x_train_noisy.astype('float32')\n",
    "x_test_noisy = x_test_noisy.astype('float32')\n",
    "\n",
    "#print(x_test_noisy[1].dtype)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "class Encoder(K.layers.Layer):\n",
    "    def __init__(self, filters):\n",
    "        super(Encoder, self).__init__()\n",
    "        self.conv1 = Conv2D(filters=filters[0], kernel_size=3, strides=1, activation='relu', padding='same')\n",
    "        self.conv2 = Conv2D(filters=filters[1], kernel_size=3, strides=1, activation='relu', padding='same')\n",
    "        self.conv3 = Conv2D(filters=filters[2], kernel_size=3, strides=1, activation='relu', padding='same')\n",
    "        self.pool = MaxPooling2D((2, 2), padding='same')\n",
    "               \n",
    "    \n",
    "    def call(self, input_features):\n",
    "        x = self.conv1(input_features)\n",
    "        #print(\"Ex1\", x.shape)\n",
    "        x = self.pool(x)\n",
    "        #print(\"Ex2\", x.shape)\n",
    "        x = self.conv2(x)\n",
    "        x = self.pool(x)\n",
    "        x = self.conv3(x)\n",
    "        x = self.pool(x)\n",
    "        return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "class Decoder(K.layers.Layer):\n",
    "    def __init__(self, filters):\n",
    "        super(Decoder, self).__init__()\n",
    "        self.conv1 = Conv2D(filters=filters[2], kernel_size=3, strides=1, activation='relu', padding='same')\n",
    "        self.conv2 = Conv2D(filters=filters[1], kernel_size=3, strides=1, activation='relu', padding='same')\n",
    "        self.conv3 = Conv2D(filters=filters[0], kernel_size=3, strides=1, activation='relu', padding='valid')\n",
    "        self.conv4 = Conv2D(1, 3, 1, activation='sigmoid', padding='same')\n",
    "        self.upsample = UpSampling2D((2, 2))\n",
    "  \n",
    "    def call(self, encoded):\n",
    "        x = self.conv1(encoded)\n",
    "        #print(\"dx1\", x.shape)\n",
    "        x = self.upsample(x)\n",
    "        #print(\"dx2\", x.shape)\n",
    "        x = self.conv2(x)\n",
    "        x = self.upsample(x)\n",
    "        x = self.conv3(x)\n",
    "        x = self.upsample(x)\n",
    "        return self.conv4(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Autoencoder(K.Model):\n",
    "    def __init__(self, filters):\n",
    "        super(Autoencoder, self).__init__()\n",
    "        self.loss = []\n",
    "        self.encoder = Encoder(filters)\n",
    "        self.decoder = Decoder(filters)\n",
    "\n",
    "    def call(self, input_features):\n",
    "        #print(input_features.shape)\n",
    "        encoded = self.encoder(input_features)\n",
    "        #print(encoded.shape)\n",
    "        reconstructed = self.decoder(encoded)\n",
    "        #print(reconstructed.shape)\n",
    "        return reconstructed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/50\n",
      "60000/60000 [==============================] - 5s 88us/sample - loss: 0.2066 - val_loss: 0.1507\n",
      "Epoch 2/50\n",
      "60000/60000 [==============================] - 4s 72us/sample - loss: 0.1429 - val_loss: 0.1335\n",
      "Epoch 3/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.1303 - val_loss: 0.1244\n",
      "Epoch 4/50\n",
      "60000/60000 [==============================] - 4s 70us/sample - loss: 0.1235 - val_loss: 0.1200\n",
      "Epoch 5/50\n",
      "60000/60000 [==============================] - 4s 74us/sample - loss: 0.1191 - val_loss: 0.1159\n",
      "Epoch 6/50\n",
      "60000/60000 [==============================] - 5s 80us/sample - loss: 0.1160 - val_loss: 0.1140\n",
      "Epoch 7/50\n",
      "60000/60000 [==============================] - 4s 72us/sample - loss: 0.1137 - val_loss: 0.1115\n",
      "Epoch 8/50\n",
      "60000/60000 [==============================] - 4s 74us/sample - loss: 0.1119 - val_loss: 0.1098\n",
      "Epoch 9/50\n",
      "60000/60000 [==============================] - 4s 69us/sample - loss: 0.1104 - val_loss: 0.1091\n",
      "Epoch 10/50\n",
      "60000/60000 [==============================] - 4s 71us/sample - loss: 0.1093 - val_loss: 0.1077\n",
      "Epoch 11/50\n",
      "60000/60000 [==============================] - 4s 74us/sample - loss: 0.1081 - val_loss: 0.1086\n",
      "Epoch 12/50\n",
      "60000/60000 [==============================] - 5s 76us/sample - loss: 0.1072 - val_loss: 0.1057\n",
      "Epoch 13/50\n",
      "60000/60000 [==============================] - 4s 73us/sample - loss: 0.1063 - val_loss: 0.1064\n",
      "Epoch 14/50\n",
      "60000/60000 [==============================] - 4s 70us/sample - loss: 0.1056 - val_loss: 0.1042\n",
      "Epoch 15/50\n",
      "60000/60000 [==============================] - 4s 75us/sample - loss: 0.1051 - val_loss: 0.1043\n",
      "Epoch 16/50\n",
      "60000/60000 [==============================] - 5s 79us/sample - loss: 0.1044 - val_loss: 0.1035\n",
      "Epoch 17/50\n",
      "60000/60000 [==============================] - 4s 74us/sample - loss: 0.1040 - val_loss: 0.1035\n",
      "Epoch 18/50\n",
      "60000/60000 [==============================] - 5s 76us/sample - loss: 0.1035 - val_loss: 0.1028\n",
      "Epoch 19/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1031 - val_loss: 0.1028\n",
      "Epoch 20/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1027 - val_loss: 0.1022\n",
      "Epoch 21/50\n",
      "60000/60000 [==============================] - 4s 75us/sample - loss: 0.1024 - val_loss: 0.1016\n",
      "Epoch 22/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1022 - val_loss: 0.1014\n",
      "Epoch 23/50\n",
      "60000/60000 [==============================] - 4s 73us/sample - loss: 0.1019 - val_loss: 0.1015\n",
      "Epoch 24/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1016 - val_loss: 0.1008\n",
      "Epoch 25/50\n",
      "60000/60000 [==============================] - 5s 75us/sample - loss: 0.1015 - val_loss: 0.1009\n",
      "Epoch 26/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1012 - val_loss: 0.1005\n",
      "Epoch 27/50\n",
      "60000/60000 [==============================] - 5s 76us/sample - loss: 0.1011 - val_loss: 0.1008\n",
      "Epoch 28/50\n",
      "60000/60000 [==============================] - 4s 75us/sample - loss: 0.1009 - val_loss: 0.1018\n",
      "Epoch 29/50\n",
      "60000/60000 [==============================] - 5s 79us/sample - loss: 0.1007 - val_loss: 0.1005\n",
      "Epoch 30/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1005 - val_loss: 0.1002\n",
      "Epoch 31/50\n",
      "60000/60000 [==============================] - 5s 76us/sample - loss: 0.1004 - val_loss: 0.1011\n",
      "Epoch 32/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1003 - val_loss: 0.0999\n",
      "Epoch 33/50\n",
      "60000/60000 [==============================] - 5s 76us/sample - loss: 0.1002 - val_loss: 0.0997\n",
      "Epoch 34/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.1001 - val_loss: 0.1004\n",
      "Epoch 35/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.1000 - val_loss: 0.0993\n",
      "Epoch 36/50\n",
      "60000/60000 [==============================] - 5s 76us/sample - loss: 0.0998 - val_loss: 0.0992\n",
      "Epoch 37/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.0997 - val_loss: 0.0996\n",
      "Epoch 38/50\n",
      "60000/60000 [==============================] - 4s 75us/sample - loss: 0.0996 - val_loss: 0.0992\n",
      "Epoch 39/50\n",
      "60000/60000 [==============================] - 5s 78us/sample - loss: 0.0995 - val_loss: 0.0993\n",
      "Epoch 40/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.0995 - val_loss: 0.0991\n",
      "Epoch 41/50\n",
      "60000/60000 [==============================] - 5s 76us/sample - loss: 0.0994 - val_loss: 0.0994\n",
      "Epoch 42/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.0993 - val_loss: 0.0990\n",
      "Epoch 43/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.0992 - val_loss: 0.0990\n",
      "Epoch 44/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.0992 - val_loss: 0.1000\n",
      "Epoch 45/50\n",
      "60000/60000 [==============================] - 5s 80us/sample - loss: 0.0990 - val_loss: 0.0990\n",
      "Epoch 46/50\n",
      "60000/60000 [==============================] - 5s 79us/sample - loss: 0.0990 - val_loss: 0.0988\n",
      "Epoch 47/50\n",
      "60000/60000 [==============================] - 5s 77us/sample - loss: 0.0989 - val_loss: 0.0989\n",
      "Epoch 48/50\n",
      "60000/60000 [==============================] - 5s 75us/sample - loss: 0.0989 - val_loss: 0.0985\n",
      "Epoch 49/50\n",
      "60000/60000 [==============================] - 5s 75us/sample - loss: 0.0988 - val_loss: 0.0991\n",
      "Epoch 50/50\n",
      "60000/60000 [==============================] - 4s 73us/sample - loss: 0.0988 - val_loss: 0.0992\n"
     ]
    }
   ],
   "source": [
    "model = Autoencoder(filters)\n",
    "\n",
    "model.compile(loss='binary_crossentropy', optimizer='adam')\n",
    "\n",
    "loss = model.fit(x_train_noisy,\n",
    "                x_train,\n",
    "                validation_data=(x_test_noisy, x_test),\n",
    "                epochs=max_epochs,\n",
    "                batch_size=batch_size)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\n",
    "plt.plot(range(max_epochs), loss.history['loss'])\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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Fus6q5jzBw8eHI899ljD+2Ix7xZo3yFc91ACprLKkSNHpvijjz7K2nguVQbQFihjUntpMnr06BSrDTJthlXOO4M5LtGxY8cUH3rooVkb554jjzyyYX1xlVVWqRXHp5bgvNd1riqzID/jjDNKv0vXIxtttFGKKV9Qy/UuXbqkmBLSeteySr1yjhNPPDH7TJkU1+hq78t+T8lPxHSp6RVXXBHjx49vSF8cPHhwrbiH9beVSVqUqnNJCQ0lRxH5mEyJpc4zPXv2TDEtvinVicj79oABA0qPieU79BmZNvMqWaaMi+PK7bffnm1HebxK4/n8c9xxxzWsL/bp06dWWH/ren/11VdPMX9fRLksW9ede++9d4p32223rO3tt99OMc+L9gGOZbzXtLwBj1fXjexHKvEqg8+fEeWSKX027d+/f4r1+bkeeb4zaowxxhhjjDHGGGOaBL+oMcYYY4wxxhhjjGkS2uz6RDQVupBLzQyaQkvHF6byTpkyJdtuxx13TDFTjVWCw1RITStlehxTsHv06JFtx1TzPfbYI2tjhe9//OMfKa5yBdF0WVZ3P//889tFbqGpvayervIepruPHz++1eOMyCvUawohK7zzXqPLR0Se7j906NAU9+3bN9uO7j+axs9UOabhqRxCnAtKYYqsynUoo6G8RmmUu8U888xTK75T5XR0SdC0d56/rl27pviII47Ittt1110bcZiJLbbYIsXqmsI+zHTi9oDXninOEfm50vNB6dzHH388y6VPdNyJyF1L6Din4wv7UZUslPeF9ge6mdBl7a677sq2O+GEE1KsEhB+/ta3vpXibbbZJtuOLiXqDsA0+3rTy+l2FJGnwjaqL/bp06dWjFGNcIarQiUudFagZFfHIDqPEJ3TmNpMuXFEPq5QtqQw9Vj7GF1aOM+qDHHcuHEp7tOnT9bGOerFF19sl76oawJ10yFMhedxa3975plnUqyuLmWo7It9vaoPUNpw7733Zm1cI1HqpvIEppdrejb7KVPZdc3AtQ/XRBHTJewXXHBBuziwKVyH6hqV9yLvbT3HVfIUji10Oq1X0lL1XXS+jMidnjiezjfffNl2HEM1LZ9S4jKJsaLyht/85jcpfu211xrWFymboQQvoloqI/tIsTqfUdJUrwuNSuc41tPVhQ6KES1dFMugJLXK6YpytohcHsLyDMccc0xd3xsx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WreCNRpYiyAit0A99dRTo4yhQ4emWDVztMscOnRowzSH8847b62oFaR2gURtw2iFvvLKK6eYdmiKWrFRC85rpRpW1fQVaH0AaqRVO8o6GTy3es/wftI6IaxnU6/mlLVfIqbf508++WRMmjSp3S2BqzTLtEuttwZKFbSxVa1p1VhCqvTYtN2mRe6qq66abce6NNQkR7SsT9UWqOF/7733Zon+l/filClTsja1yy3o0qVL9nny5MkpXmONNbI26nBpma3XjXWhaDFZhY5liy++eKvb0Q46IuLPf/5zinXsYC0Q1ingWBSR1zRgTaKIvF5Ro7T4rPlVdS+rLT3nUNYn0No/RK8N7Us579KCOSL/3dTfq000a3dorQqte9Pa/iLye0lrzbGeEmvUqIU0a21wzIqIOOyww1J8zDHHNKwv1msnWy96X3J9o3barOHFNr0+Bx10UIpPPvnk0u+emRoXXxXapn766adZG9ddav/NujqN6ovLL798rbDI1bUC6wPqepDXhnUrtD5Bvda57Kdqxcu1YRWstaA1alivgahtLddRWr+MVu+cJ5SqulVcXzz00EPtMi/Sdjgir0fC66FtXAewbmJEXtvm1ltvLT0O1gvTNSrnlnr7G9f7ERErrbRSio8//vjSv+OYwHopEfm9zPGCa6eI/H6qoj1qt1XB+ngRee0t1n/RZxX2MdZgi8hrobJ+idYPKrtuH3zwQfaZ9bW0TuYDDzyQ4l//+tcp1uci1lXhs1RExL777ptiPtNov2RtMNY3imhRA69d+qLWbOUYUgX7sI5dXGdofUmy5ZZbplif2QnvC32PwNqbWleW8xPXoVVoPSHWGuK9q8+mVRS1Ya+88soYP368a9QYY4wxxhhjjDHGNDN+UWOMMcYYY4wxxhjTJHSsapwwYUJKCd5rr72ytio7W7bx7zQ1lSlLTAWOyFPUaFtIOUREbn/HNGGmlul3vf/++1mbpra1duwReeqxpoBpmm+BpjcyXf3OO+/M2jTtuVG8++67LdJgC2h1S9vNiPyc8byr5TjPxSOPPJK10cqbKYmaHlyGWlEzJVTTGFUGUna8hBbkEbmFaL3oby5sQtUC+6swxxxzJImHpmDzdzO1NiJPpWTa8M4775xtRymfpgiy31LuROv14hgLeO+cd9552XaUuLz77rtZGyUz119/fYrVFvzss89OcVul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qDHGGGOMMcYYY4xpElyjxjSUbt26ZZ/32muvFB900EEp7tOnT7YdbberapMsvPDCKaYdd0TERRddlOJPPvlkZg7bzEJYh2aVVVbJ2tZZZ50UX3nllSl+/fXXs+2s5f1qUBfdvXv3rG255ZZL8U477ZTib3/729l2d9xxR4pPPPHErO2jjz5Ksa9V29GaX81+Lv/Xjnd2RK8B51ZeD63j5jpTsxd6H3Tt2jXF888/f4rHjRuXbTd58uT2PTBj/ofQ2nzsR3yO0WefQYMGpfgb3/hG1sbamxMmTEjx1VdfnW339ttvp5g1Ac3XC2fUGGOMMcYYY4wxxjQJflFjjDHGGGOMMcYY0yS0i/SJKZeafkmcyjV70KVLlxQfeOCBWRvlTj169EixSpPeeuutFL/55pspVlnGgAEDUqyphn379k3xO++8k2Kn3zcXlD59//vfz9po237fffelmPdEhNP0vyq8BpQ6RUQcfvjhKabcaZ555sm2W3TRRVP8wAMPZG133XVXiillNDOGc6amXdMunbHKWDi3cn9t7TfcB783Ik8F12v9+eefp9jjcPvB67PkkktmbUcffXSKO3funGKVKz766KMpdp9tia5leS4ZT5kyJduOfbO917wc1xdccMGsbbXVVkvx008/nWLPpdMpG18j8mvnZ5fZC/abiIgFFlggxUOGDMna9t577xR/61vfSrE+q/D5ROc+fuaz0FJLLZVtd/zxx6f4tddeKz1+M/OUvZtoxnWKM2qMMcYYY4wxxhhjmgS/qDHGGGOMMcYYY4xpEtpF+kSXgW9+85spHjhwYLYd0y/Hjx+ftWkqt2keNGWMEogtttgia2NKMCuYn3zyydl2N998c4o/++yzFOs98/Of/zzFKtngti+++GKKmzGV7evMvPPOm+KNNtooa2MativeNxamclMeceyxx2bbfec730lxp06dUqz9iFKon/zkJ1nbq6++muKRI0eW7sNUo+n3dJlgqjVdtiJyRzz2Ke1H9V4PjvkqgaNz25gxY7K2l156qdXjMI2FY+oll1yStXGeHDt2bIpVOmxawvuesuuIiAMOOCDFvXr1SvE111yTbffCCy+k+IMPPkixysvaMjaqZGOJJZZI8XbbbVf6d/fff3+Kv25rbV2/sh8stNBCKVYZCtcjo0aNSvGHH36Ybee1yqyH82RVP+K179mzZ4p3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\n",
      "text/plain": [
       "<Figure size 1440x288 with 20 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "number = 10  # how many digits we will display\n",
    "plt.figure(figsize=(20, 4))\n",
    "for index in range(number):\n",
    "    # display original\n",
    "    ax = plt.subplot(2, number, index + 1)\n",
    "    plt.imshow(x_test_noisy[index].reshape(28, 28), cmap='gray')\n",
    "    ax.get_xaxis().set_visible(False)\n",
    "    ax.get_yaxis().set_visible(False)\n",
    "\n",
    "    # display reconstruction\n",
    "    ax = plt.subplot(2, number, index + 1 + number)\n",
    "    plt.imshow(tf.reshape(model(x_test_noisy)[index], (28, 28)), cmap='gray')\n",
    "    ax.get_xaxis().set_visible(False)\n",
    "    ax.get_yaxis().set_visible(False)\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tf2p0alpha]",
   "language": "python",
   "name": "conda-env-tf2p0alpha-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
